gtkwindow: run ::event and specific handlers for EWMH action triggering events
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 16 Sep 2014 19:19:40 +0000 (21:19 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 23 Sep 2014 00:51:24 +0000 (20:51 -0400)
This gives an opportunity for implementations to handle these events
differently, instead of hardcoding the WM-triggering behavior.

gtk_window_event() only forwards events for WM management if the event
widget is not the window (ie. caught when bubbling), so is safe to be
called here without triggering gtk_window_handle_wm_event() twice.

This commit is an adaption to master of
https://bugzilla.gnome.org/show_bug.cgi?id=736702#c1 by Cosimo Cecchi.

gtk/gtkwindow.c

index c0943d2b7f95b808cae92106766cf7e7dabb3fc2..35832c5fc1a6a0863b4873f055e9b6cd2ffaab53 100644 (file)
@@ -7654,6 +7654,14 @@ _gtk_window_check_handle_wm_event (GdkEvent *event)
   if (!GTK_IS_WINDOW (widget))
     return GDK_EVENT_PROPAGATE;
 
+  if (event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE &&
+      event->type != GDK_MOTION_NOTIFY && event->type != GDK_TOUCH_BEGIN &&
+      event->type != GDK_TOUCH_END && event->type != GDK_TOUCH_UPDATE)
+    return GDK_EVENT_PROPAGATE;
+
+  if (gtk_widget_event (widget, event))
+    return GDK_EVENT_STOP;
+
   return gtk_window_handle_wm_event (GTK_WINDOW (widget), event);
 }